MongoDB এর Aggregation Framework হল একটি শক্তিশালী উপাদান যা ডেটা প্রসেসিং, বিশ্লেষণ এবং রূপান্তরের জন্য ব্যবহৃত হয়। এটি MongoDB ডেটাবেসে ডেটার উপর অ্যাগ্রিগেশন অপারেশন চালানোর জন্য ব্যবহৃত হয়, যেমন ডেটা গ্রুপিং, ফিল্টারিং, সোর্টিং, গননা ইত্যাদি। MongoDB অ্যাগ্রিগেশন ফ্রেমওয়ার্কে বিভিন্ন স্টেজ থাকে, যার মাধ্যমে আপনি ডেটার উপর বিভিন্ন অপারেশন করতে পারেন।
MongoDB এর অ্যাগ্রিগেশন পিপলাইন একটি সিরিজ স্টেজের মাধ্যমে ডেটাকে প্রসেস করে, যা প্রত্যেকটি স্টেজ ডেটাকে প্রক্রিয়া এবং রূপান্তর করে পরবর্তী স্টেজে পাঠায়।
MongoDB তে অ্যাগ্রিগেশন ফ্রেমওয়ার্কে সাধারণত দুটি প্রধান উপাদান থাকে:
$match
, $group
, $sort
, $project
ইত্যাদি।MongoDB এর অ্যাগ্রিগেশন পিপলাইন একটি সিরিজ স্টেজের মাধ্যমে কাজ করে, যা ডেটার ওপর একাধিক অপারেশন প্রয়োগ করে। প্রতিটি স্টেজ একটি নির্দিষ্ট কাজ করে, এবং তার ফলাফল পরবর্তী স্টেজে পাঠানো হয়। অ্যাগ্রিগেশন পিপলাইন অপারেশনগুলো স্টেজের মাধ্যমে সংকলিত হয়।
$match:
find()
অপারেশনের মতো কাজ করে।উদাহরণ:
db.collection.aggregate([
{ $match: { age: { $gt: 30 } } }
])
$group:
উদাহরণ:
db.collection.aggregate([
{ $group: { _id: "$city", total: { $sum: 1 } } }
])
$sort:
উদাহরণ:
db.collection.aggregate([
{ $sort: { age: -1 } }
])
$project:
উদাহরণ:
db.collection.aggregate([
{ $project: { name: 1, age: 1 } }
])
$limit:
উদাহরণ:
db.collection.aggregate([
{ $limit: 5 }
])
$skip:
উদাহরণ:
db.collection.aggregate([
{ $skip: 5 }
])
$unwind:
উদাহরণ:
db.collection.aggregate([
{ $unwind: "$items" }
])
MongoDB অ্যাগ্রিগেশন অপারেটর ব্যবহার করে ডেটা পরিবর্তন ও বিশ্লেষণ করা হয়। কিছু জনপ্রিয় অ্যাগ্রিগেশন অপারেটরের মধ্যে রয়েছে:
$sum:
উদাহরণ:
db.collection.aggregate([
{ $group: { _id: "$city", totalAge: { $sum: "$age" } } }
])
$avg:
উদাহরণ:
db.collection.aggregate([
{ $group: { _id: "$city", averageAge: { $avg: "$age" } } }
])
$min এবং $max:
উদাহরণ:
db.collection.aggregate([
{ $group: { _id: "$city", minAge: { $min: "$age" }, maxAge: { $max: "$age" } } }
])
$first এবং $last:
উদাহরণ:
db.collection.aggregate([
{ $group: { _id: "$city", firstDoc: { $first: "$name" }, lastDoc: { $last: "$name" } } }
])
$addFields:
উদাহরণ:
db.collection.aggregate([
{ $addFields: { fullName: { $concat: ["$firstName", " ", "$lastName"] } } }
])
MongoDB এর Aggregation Framework হল একটি শক্তিশালী টুল যা ডেটা প্রসেসিং এবং বিশ্লেষণের জন্য ব্যবহৃত হয়। এটি ডেটা গ্রুপিং, ফিল্টারিং, সোর্টিং, গননা, গড় বের করা, এবং আরও অনেক ধরণের অপারেশন করার জন্য ডিজাইন করা হয়েছে। MongoDB অ্যাগ্রিগেশন ফ্রেমওয়ার্কের মাধ্যমে আপনি ডেটার উপর জটিল ক্যালকুলেশন, বিশ্লেষণ এবং রূপান্তর করতে পারেন। অ্যাগ্রিগেশন পিপলাইন এবং অপারেটরগুলি MongoDB তে ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য একটি অত্যন্ত কার্যকরী পদ্ধতি প্রদান করে।
Aggregation হলো MongoDB এর একটি শক্তিশালী ফিচার, যা ডেটা বিশ্লেষণ, প্রক্রিয়াকরণ এবং সারাংশ তৈরি করার জন্য ব্যবহৃত হয়। MongoDB তে aggregation ডেটাকে এক বা একাধিক স্টেপে প্রক্রিয়াকরণ করে একটি কাঙ্খিত আউটপুট প্রদান করে। এটি ডেটার উপর বিভিন্ন ধরণের অপারেশন যেমন গ্রুপিং, ফিল্টারিং, সোর্টিং, এবং অ্যাগ্রিগেশন ক্যালকুলেশন (যেমন গননা, গড়, সর্বোচ্চ/নূন্যতম মান নির্ধারণ) করার জন্য ব্যবহৃত হয়।
MongoDB তে aggregation সাধারণত aggregation pipeline ব্যবহার করে করা হয়, যা একটি স্টেপ-by-স্টেপ প্রসেস। এই পিপলাইনটি একটি সিকোয়েন্সের মাধ্যমে একাধিক স্টেজে ডেটা প্রক্রিয়া করে এবং প্রতিটি স্টেজ পরবর্তী স্টেজে ডেটা পাঠায়।
MongoDB তে aggregation পিপলাইন একটি তালিকা হিসেবে কাজ করে, যেখানে প্রতিটি তালিকা একটি stage (স্টেজ) এর মাধ্যমে ডেটাকে প্রক্রিয়াকরণ করে। প্রতিটি স্টেজ ডেটাতে একটি নির্দিষ্ট কাজ করে এবং তার পরবর্তী স্টেজে ডেটা প্রেরণ করে।
WHERE
ক্লজের মতো কাজ করে।উদাহরণ:
db.collectionName.aggregate([
{ $match: { age: { $gt: 30 } } }
])
এই কুয়েরি ডেটাবেস থেকে সেই সব ডকুমেন্ট বের করবে যেখানে বয়স ৩০ এর বেশি।
উদাহরণ:
db.collectionName.aggregate([
{ $group: { _id: "$age", total: { $sum: 1 } } }
])
এখানে ডেটাকে বয়সের ভিত্তিতে গ্রুপ করা হয়েছে এবং প্রতিটি বয়সের জন্য ডকুমেন্টের সংখ্যা গোনা হচ্ছে।
ORDER BY
ক্লজের মতো কাজ করে।উদাহরণ:
db.collectionName.aggregate([
{ $sort: { age: 1 } }
])
এখানে ডেটাকে বয়স অনুসারে ascending অর্ডারে সাজানো হচ্ছে।
উদাহরণ:
db.collectionName.aggregate([
{ $project: { name: 1, age: 1, isAdult: { $gte: ["$age", 18] } } }
])
এখানে একটি নতুন isAdult
ফিল্ড তৈরি হচ্ছে, যা true
অথবা false
হবে, নির্ভর করে age
ফিল্ডের মান ১৮ এর বেশি কিনা।
উদাহরণ:
db.collectionName.aggregate([
{ $limit: 5 }
])
এখানে সর্বাধিক ৫টি ডকুমেন্ট রিটার্ন করা হবে।
LIMIT OFFSET
এর মতো কাজ করে।উদাহরণ:
db.collectionName.aggregate([
{ $skip: 10 }
])
এখানে প্রথম ১০টি ডকুমেন্ট বাদ দিয়ে পরবর্তী ডকুমেন্টগুলো রিটার্ন করা হবে।
উদাহরণ:
db.collectionName.aggregate([
{ $unwind: "$tags" }
])
এখানে tags
অ্যারের প্রতিটি উপাদানকে আলাদা ডকুমেন্টে রূপান্তরিত করা হচ্ছে।
উদাহরণ:
db.collectionName.aggregate([
{ $addFields: { fullName: { $concat: ["$firstName", " ", "$lastName"] } } }
])
এখানে fullName
নামক একটি নতুন ফিল্ড তৈরি হচ্ছে যা firstName
এবং lastName
ফিল্ডগুলির মান একত্রিত করে।
ডেটা গ্রুপ করে প্রতিটি গ্রুপের ডকুমেন্ট সংখ্যা গোনা:
db.orders.aggregate([
{ $group: { _id: "$product", totalOrders: { $sum: 1 } } }
])
এখানে, প্রতিটি পণ্য (product) ভিত্তিতে ডেটা গ্রুপ করা হচ্ছে এবং প্রতিটি গ্রুপের মধ্যে মোট অর্ডারের সংখ্যা গোনা হচ্ছে।
বয়স ৩০ এর বেশি এমন ব্যবহারকারীদের ডেটা সজ্জিত করা:
db.users.aggregate([
{ $match: { age: { $gt: 30 } } },
{ $sort: { name: 1 } }
])
এখানে প্রথমে বয়স ৩০ এর বেশি ব্যবহারকারীদের ফিল্টার করা হচ্ছে এবং তারপর তাদের নামের ভিত্তিতে ascending অর্ডারে সাজানো হচ্ছে।
ডেটার নির্দিষ্ট ফিল্ড কাস্টমাইজ করা:
db.users.aggregate([
{ $project: { fullName: { $concat: ["$firstName", " ", "$lastName"] }, age: 1 } }
])
এখানে fullName
নামক নতুন ফিল্ড তৈরি করা হচ্ছে, যা firstName
এবং lastName
এর মান নিয়ে গঠিত এবং age
ফিল্ডটিও রিটার্ন হচ্ছে।
MongoDB তে aggregation ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য একটি শক্তিশালী টুল। এটি ডেটাকে বিভিন্ন স্টেপে প্রক্রিয়াকরণ করে নির্দিষ্ট ফলাফল প্রদান করে, যা ডেটার ওপর গ্রুপিং, সোর্টিং, ফিল্টারিং এবং অন্যান্য অ্যাগ্রিগেশন অপারেশন করতে সহায়তা করে। Aggregation Pipeline এর মাধ্যমে MongoDB তে ডেটা প্রক্রিয়াকরণ খুবই নমনীয় এবং সহজে কাস্টমাইজ করা যায়, যা বড় ডেটাবেসের জন্য একটি গুরুত্বপূর্ণ সুবিধা।
MongoDB তে অ্যাগ্রিগেশন পিপলাইন ব্যবহারের মাধ্যমে ডেটা প্রসেস এবং বিশ্লেষণ করা হয়। এই পিপলাইনে বিভিন্ন স্টেজ থাকে, এবং $match
, $group
, এবং $project
হল তিনটি গুরুত্বপূর্ণ স্টেজ যা MongoDB তে ডেটা ফিল্টারিং, গ্রুপিং এবং প্রজেকশনের জন্য ব্যবহৃত হয়।
$match
অপারেটর$match
অপারেটর MongoDB অ্যাগ্রিগেশন পিপলাইনে ডেটা ফিল্টার করতে ব্যবহৃত হয়। এটি কুয়েরি অপারেশন ব্যবহার করে, যাতে নির্দিষ্ট শর্ত পূর্ণ করে এমন ডকুমেন্টগুলো নির্বাচন করা হয়।
{ $match: { <query> } }
<query>
: কুয়েরি শর্ত (যেমন: { age: { $gt: 30 } }
)বয়সের ভিত্তিতে ফিল্টার:
db.users.aggregate([
{ $match: { age: { $gt: 30 } } }
])
এই কুয়েরি "users" কালেকশনের ডকুমেন্টগুলো থেকে সেই ডকুমেন্টগুলো ফিল্টার করবে যাদের বয়স ৩০ এর বেশি।
নামের ভিত্তিতে ফিল্টার:
db.users.aggregate([
{ $match: { name: "John" } }
])
এই কুয়েরি "users" কালেকশনের মধ্যে name
এর মান "John" থাকা ডকুমেন্টগুলো নির্বাচন করবে।
$group
অপারেটর$group
অপারেটর MongoDB তে গ্রুপিং করতে ব্যবহৃত হয়। এটি একটি অ্যাগ্রিগেশন স্টেজ, যা নির্দিষ্ট ফিল্ডের ভিত্তিতে ডকুমেন্টগুলোকে গ্রুপ করে এবং গ্রুপের উপর বিভিন্ন ধরনের অ্যাগ্রিগেশন অপারেশন চালায়।
{ $group: { _id: <field>, <aggregationOperations> } }
_id
: গ্রুপ করার জন্য নির্বাচিত ফিল্ড (যেমন: age
, name
, ইত্যাদি)<aggregationOperations>
: গ্রুপ করা ডেটার ওপর বিভিন্ন অপারেশন যেমন sum
, avg
, max
, min
, count
ইত্যাদি।বয়স অনুসারে গ্রুপিং এবং গননা:
db.users.aggregate([
{ $group: { _id: "$age", totalUsers: { $sum: 1 } } }
])
এই কুয়েরি "users" কালেকশনের ডকুমেন্টগুলো বয়স অনুসারে গ্রুপ করে এবং প্রতিটি বয়সের জন্য মোট কতজন ব্যবহারকারী আছেন তা গণনা করবে।
নামের ভিত্তিতে গ্রুপিং এবং গড় বয়স নির্ধারণ:
db.users.aggregate([
{ $group: { _id: "$name", avgAge: { $avg: "$age" } } }
])
এই কুয়েরি "users" কালেকশনের ডকুমেন্টগুলোকে নামের ভিত্তিতে গ্রুপ করে এবং প্রতিটি নামের জন্য গড় বয়স বের করবে।
$project
অপারেটর$project
অপারেটর MongoDB অ্যাগ্রিগেশন পিপলাইনে ডেটার প্রজেকশন (ফিল্ড নির্বাচিত করা) করতে ব্যবহৃত হয়। এটি কেবল নির্দিষ্ট ফিল্ডগুলোকেই রিটার্ন করে, যা আপনি নির্ধারণ করেন।
{ $project: { <field1>: <value1>, <field2>: <value2>, ... } }
<field1>
, <field2>
: ফিল্ডের নাম যেগুলো আপনি প্রজেক্ট করতে চান।<value1>
, <value2>
: 1
বা 0
এর মান, যেখানে 1
মানে ফিল্ডটি অন্তর্ভুক্ত করা হবে এবং 0
মানে ফিল্ডটি বাদ দেওয়া হবে।নির্দিষ্ট ফিল্ড প্রজেক্ট করা:
db.users.aggregate([
{ $project: { name: 1, age: 1 } }
])
এই কুয়েরি "users" কালেকশনের name
এবং age
ফিল্ডগুলোকেই রিটার্ন করবে এবং অন্যান্য ফিল্ড বাদ দিবে।
নতুন ফিল্ড তৈরি করে প্রজেক্ট করা:
db.users.aggregate([
{ $project: { name: 1, age: 1, ageInMonths: { $multiply: ["$age", 12] } } }
])
এই কুয়েরি "users" কালেকশনের name
এবং age
ফিল্ডগুলো রিটার্ন করবে, সাথে ageInMonths
নামের নতুন ফিল্ড তৈরি করবে, যা বয়সের ভিত্তিতে মাসে পরিণত হবে।
MongoDB তে $match
, $group
, এবং $project
অপারেটরগুলি অ্যাগ্রিগেশন পিপলাইনের গুরুত্বপূর্ণ অংশ। $match
অপারেটর ব্যবহার করে ডেটা ফিল্টার করা হয়, $group
অপারেটর দিয়ে ডেটাকে গ্রুপ করা হয় এবং $project
অপারেটর দিয়ে ডেটার ফিল্ড প্রজেক্ট বা নির্বাচিত করা হয়। এই অপারেশনগুলির মাধ্যমে MongoDB তে ডেটা বিশ্লেষণ এবং প্রসেসিং খুবই শক্তিশালী এবং নমনীয় হয়।
MongoDB তে Pipeline এবং Stage অ্যাগ্রিগেশন অপারেশন তৈরির মূল অংশ। অ্যাগ্রিগেশন পিপলাইন ব্যবহার করে আপনি ডেটার উপর বিভিন্ন অপারেশন (যেমন: ফিল্টার, গ্রুপ, সোর্ট, ইত্যাদি) একে একে কার্যকর করতে পারেন। MongoDB অ্যাগ্রিগেশন পিপলাইন খুবই শক্তিশালী এবং ফ্লেক্সিবল, যা ডেটাকে বিভিন্নভাবে প্রক্রিয়া করতে সক্ষম।
MongoDB তে Pipeline হল একটি সিরিজ বা ধারাবাহিক স্টেজের একটি সেট, যা ডেটার উপর বিভিন্ন ধরনের প্রক্রিয়া (অপারেশন) চালানোর জন্য ব্যবহৃত হয়। প্রতিটি পিপলাইন একাধিক স্টেজের সমষ্টি হয়, এবং প্রতিটি স্টেজ আগের স্টেজের আউটপুটকে ইনপুট হিসেবে গ্রহণ করে।
MongoDB অ্যাগ্রিগেশন পিপলাইন ব্যবহার করে আপনি বিভিন্ন অপারেশন (যেমন: match
, group
, sort
) একে একে ডেটার উপর চালাতে পারেন এবং শেষে একটি প্রক্রিয়া করা ফলাফল পেতে পারেন।
পিপলাইন অপারেশনটি বিভিন্ন স্টেজের মাধ্যমে ডেটার উপর একাধিক কাজ চালানোর সুযোগ দেয়। পিপলাইনে অন্তর্ভুক্ত স্টেজগুলি খুবই নমনীয় এবং কার্যকরীভাবে ডেটা বিশ্লেষণ করতে সহায়তা করে।
Stage হল একটি নির্দিষ্ট অপারেশন যা MongoDB অ্যাগ্রিগেশন পিপলাইনে চলে। প্রতিটি স্টেজ একটি নির্দিষ্ট কাজ সম্পাদন করে এবং পিপলাইনের পরবর্তী স্টেজে ফলাফল সরবরাহ করে। MongoDB অ্যাগ্রিগেশন পিপলাইনে ব্যবহৃত বেশ কিছু স্টেজ রয়েছে, যার মধ্যে সবচেয়ে সাধারণ স্টেজগুলির মধ্যে উল্লেখযোগ্য:
$match
: একটি স্টেজ যা কুয়েরি শর্তের মাধ্যমে ডেটা ফিল্টার করে। এটি সাধারণত find()
কুয়েরির মতো কাজ করে এবং ডেটাকে কন্ডিশন অনুযায়ী ফিল্টার করে।
{ $match: { age: { $gte: 30 } } }
এই স্টেজে age
এর মান ৩০ বা তার বেশি হলে ডেটা মেলে।
$group
: ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয়। এটি বিশেষত ব্যবহৃত হয় গাণিতিক অপারেশন (যেমন: গড়, সংখ্যা গণনা, সর্বোচ্চ মান, ইত্যাদি) করার জন্য।
{ $group: { _id: "$age", total: { $sum: 1 } } }
এখানে age
অনুযায়ী ডেটা গ্রুপ করে এবং প্রতিটি গ্রুপের জন্য মোট সংখ্যা গণনা করা হয়।
$sort
: ডেটাকে সারণী (ascending) বা অবতরণী (descending) আকারে সাজানোর জন্য ব্যবহৃত হয়।
{ $sort: { age: 1 } }
এখানে age
এর উপর ডেটা সারণীভাবে সাজানো হচ্ছে (ascending order)।
$limit
: ডেটার সংখ্যা সীমিত করতে ব্যবহৃত হয়। এই স্টেজটি একাধিক ডেটা আইটেম থেকে একটি নির্দিষ্ট সংখ্যক আইটেম নির্বাচন করতে ব্যবহার করা হয়।
{ $limit: 5 }
এই স্টেজটি ডেটার প্রথম ৫টি আইটেম নির্বাচন করবে।
$skip
: একটি নির্দিষ্ট সংখ্যক ডেটা আইটেম উপেক্ষা (skip) করতে ব্যবহৃত হয়।
{ $skip: 5 }
এই স্টেজটি প্রথম ৫টি আইটেম স্কিপ করে পরবর্তী আইটেমগুলো দেখাবে।
$project
: ডেটার ফিল্ড সমূহকে কাস্টমাইজ করে। এটি ডেটার কিছু ফিল্ডকে অন্তর্ভুক্ত বা বাদ দিতে ব্যবহৃত হয়।
{ $project: { name: 1, age: 1 } }
এখানে name
এবং age
ফিল্ডসমূহকে প্রজেক্ট করা হচ্ছে, অন্য ফিল্ডসমূহ বাদ দেওয়া হচ্ছে।
MongoDB তে অ্যাগ্রিগেশন পিপলাইন একাধিক স্টেজের সমন্বয়ে তৈরি হয়, এবং প্রত্যেকটি স্টেজের আউটপুট পরবর্তী স্টেজে ইনপুট হিসেবে ব্যবহার হয়। একাধিক স্টেজ ব্যবহার করে আপনি ডেটা বিশ্লেষণ করতে পারেন, ডেটাকে সাজাতে পারেন, গ্রুপ করতে পারেন, এবং আরও অনেক কিছু।
একটি উদাহরণ অ্যাগ্রিগেশন পিপলাইন দেখুন, যা age
অনুযায়ী গ্রুপ করে এবং তারপর সেগুলোকে সঠিকভাবে সাজায়:
db.users.aggregate([
{ $match: { age: { $gte: 18 } } }, // বয়স ১৮ বা তার বেশি হওয়া ডেটা ফিল্টার করুন
{ $group: { _id: "$age", total: { $sum: 1 } } }, // বয়স অনুযায়ী গ্রুপ করুন এবং মোট গণনা করুন
{ $sort: { total: -1 } } // মোট গননা অনুযায়ী অবতরণীভাবে সাজান
])
এই পিপলাইনে:
$match
স্টেজ ব্যবহার করে বয়স ১৮ বা তার বেশি হওয়া ডেটা ফিল্টার করা হয়েছে।$group
স্টেজের মাধ্যমে গ্রুপ করা হয়েছে age
অনুসারে এবং প্রতিটি গ্রুপের মোট সংখ্যা গণনা করা হয়েছে।$sort
স্টেজ ব্যবহার করে মোট সংখ্যার উপর অবতরণীভাবে সাজানো হয়েছে।MongoDB অ্যাগ্রিগেশন পিপলাইন একটি শক্তিশালী ফিচার, যা ডেটা প্রক্রিয়া এবং বিশ্লেষণে সহায়তা করে। একটি পিপলাইন একাধিক স্টেজের মাধ্যমে ডেটার উপর কাজ করে এবং প্রতিটি স্টেজের ফলাফল পরবর্তী স্টেজে ইনপুট হিসেবে ব্যবহার হয়। Pipeline এবং Stage এর ধারণা MongoDB তে ডেটাবেস ব্যবস্থাপনায় নমনীয়তা এবং স্কেলেবিলিটি নিশ্চিত করে, যা বিশেষত বড় পরিসরের ডেটা বিশ্লেষণের জন্য উপযোগী।
MongoDB তে অ্যাগ্রিগেশন একটি শক্তিশালী বৈশিষ্ট্য, তবে ডেটার পরিমাণ বাড়ার সাথে সাথে জটিল অ্যাগ্রিগেশন কুয়েরিগুলোর পারফরম্যান্সে প্রভাব পড়তে পারে। অ্যাগ্রিগেশন পারফরম্যান্স টিউনিং MongoDB তে গুরুত্বপূর্ণ, যাতে ডেটাবেসের কার্যকারিতা দ্রুত এবং দক্ষ থাকে, বিশেষ করে বড় ডেটাসেট ব্যবহারের সময়। এখানে কিছু কৌশল দেওয়া হলো যা আপনাকে অ্যাগ্রিগেশন পারফরম্যান্স টিউনিংয়ে সহায়তা করবে।
ইনডেক্স ডেটাবেসে কুয়েরি অপারেশন দ্রুত করতে সাহায্য করে। অ্যাগ্রিগেশন কুয়েরি অপারেশনগুলির মধ্যে বিশেষভাবে $match
এবং $sort
এর জন্য ইনডেক্স ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। তবে, MongoDB সব অ্যাগ্রিগেশন স্টেজে ইনডেক্স ব্যবহার করতে পারে না, যেমন $group
স্টেজে।
$match
এর জন্য ইনডেক্স তৈরি করুন:
যদি অ্যাগ্রিগেশন কুয়েরির প্রথম স্টেজে $match
থাকে, তাহলে নিশ্চিত করুন যে সেই ফিল্ডের ওপর ইনডেক্স তৈরি করা আছে।
db.collection.createIndex({ age: 1 })
db.collection.aggregate([{ $match: { age: { $gte: 30 } } }])
$sort
এর জন্য ইনডেক্স তৈরি করুন:
যদি আপনার অ্যাগ্রিগেশন কুয়েরিতে $sort
থাকে, তাহলে নিশ্চিত করুন যে সেই ফিল্ডে ইনডেক্স আছে।
db.collection.createIndex({ name: 1 })
db.collection.aggregate([{ $sort: { name: 1 } }])
কম্পাউন্ড ইনডেক্স:
একাধিক ফিল্ডের ওপর $match
শর্ত দিলে, কম্পাউন্ড ইনডেক্স ব্যবহার করতে পারেন। এটি ডেটার উপর দ্রুত অনুসন্ধান করতে সাহায্য করে।
db.collection.createIndex({ age: 1, status: 1 })
db.collection.aggregate([{ $match: { age: { $gte: 30 }, status: 'active' } }])
$project
স্টেজের প্রাথমিক ব্যবহারMongoDB তে $project
স্টেজ ডেটা কিভাবে বের হবে তা নির্ধারণ করে। $project
স্টেজটি যত দ্রুত সম্ভব ব্যবহৃত হলে, পরবর্তী স্টেজে প্রক্রিয়া করা ডেটার পরিমাণ কমে যায়, যা পারফরম্যান্স উন্নত করে।
অপ্রয়োজনীয় ফিল্ড বাদ দিন:
যদি আপনার কেবল কিছু নির্দিষ্ট ফিল্ডের প্রয়োজন হয়, তবে $project
ব্যবহার করে অপ্রয়োজনীয় ফিল্ড বাদ দিন।
db.collection.aggregate([
{ $project: { _id: 0, name: 1, age: 1 } },
{ $match: { age: { $gte: 30 } } }
])
এইভাবে, পরবর্তী স্টেজে কম ডেটা প্রক্রিয়া করা হয়, যা পারফরম্যান্সে সহায়ক।
যত তাড়াতাড়ি সম্ভব ডেটা সীমাবদ্ধ করলে পরবর্তী স্টেজগুলোতে কম ডেটা আসবে এবং কুয়েরি দ্রুত হবে। $limit
এবং $skip
ব্যবহার করে আপনি অ্যাগ্রিগেশন পাইপলাইনকে আরও কার্যকরী করতে পারেন।
$limit
ব্যবহার করুন:
যদি আপনি কেবল কিছু ডকুমেন্ট চাচ্ছেন, তবে $limit
ব্যবহার করুন। এটি ডেটার পরিমাণ কমিয়ে পারফরম্যান্স বৃদ্ধি করবে।
db.collection.aggregate([
{ $match: { status: 'active' } },
{ $limit: 100 },
{ $group: { _id: '$age', total: { $sum: 1 } } }
])
$skip
এবং $limit
ব্যবহার করুন:
যদি আপনি পেজিনেশন প্রয়োগ করতে চান, তবে $skip
এবং $limit
একসাথে ব্যবহার করুন।
db.collection.aggregate([
{ $match: { status: 'active' } },
{ $skip: 50 },
{ $limit: 50 }
])
$group
স্টেজ অপটিমাইজেশন$group
স্টেজ MongoDB তে অনেক বেশি রিসোর্স ব্যবহার করে, কারণ এটি ডেটা গ্রুপিং এবং মেমরি ব্যবহার করে। পারফরম্যান্স টিউনিং করতে $group
স্টেজে কিছু কৌশল অনুসরণ করা যেতে পারে।
প্রথমে $project
ব্যবহার করুন:$group
এর আগে $project
ব্যবহার করে আপনি শুধু প্রয়োজনীয় ফিল্ডগুলো রাখতে পারেন। এতে মেমরি ব্যবহার কমে এবং পারফরম্যান্স বৃদ্ধি পায়।
db.collection.aggregate([
{ $project: { age: 1, status: 1 } },
{ $group: { _id: "$age", count: { $sum: 1 } } }
])
$unwind
অপ্টিমাইজেশনMongoDB তে $unwind
স্টেজ আছেযখন কোনো অ্যারে ফিল্ডকে একাধিক ডকুমেন্টে ভাগ করা হয়। কিন্তু যখন অ্যারে বড় হয়, তখন এটি অনেক বেশি ডকুমেন্ট তৈরি করতে পারে, যা পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে।
$project
এর মাধ্যমে অ্যারের আকার সীমাবদ্ধ করুন:
বড় অ্যারের ক্ষেত্রে $unwind
এর আগে $project
ব্যবহার করে অ্যারের আকার সীমাবদ্ধ করুন।
db.collection.aggregate([
{ $project: { items: { $slice: ["$items", 10] } } },
{ $unwind: "$items" }
])
$unwind
এর সাথে preserveNullAndEmptyArrays
ব্যবহার করুন:
যদি আপনি ফাঁকা অ্যারে ডকুমেন্ট প্রসেস করতে না চান, তবে preserveNullAndEmptyArrays
ব্যবহার করুন।
db.collection.aggregate([
{ $unwind: { path: "$items", preserveNullAndEmptyArrays: true } }
])
$facet
স্টেজ ব্যবহার করাMongoDB তে $facet
স্টেজের মাধ্যমে একাধিক অ্যাগ্রিগেশন পাইপলাইন একসাথে চালানো যায়। এটি একাধিক পারালাল ক্যালকুলেশন করার জন্য উপযুক্ত।
একাধিক পাইপলাইন চালান:$facet
এর মাধ্যমে একাধিক অ্যাগ্রিগেশন অপারেশন একসাথে চালাতে পারেন, যা সময় বাঁচায় এবং কার্যকরী হয়।
db.collection.aggregate([
{
$facet: {
"groupByAge": [{ $group: { _id: "$age", total: { $sum: 1 } } }],
"groupByStatus": [{ $group: { _id: "$status", total: { $sum: 1 } } }]
}
}
])
এটি আপনাকে একই ডেটাতে একাধিক বিশ্লেষণ করতে সাহায্য করে, যাতে একাধিক কুয়েরি চালানোর প্রয়োজন হয় না।
MongoDB তে explain()
পদ্ধতি ব্যবহার করে অ্যাগ্রিগেশন কুয়েরির কার্যকারিতা বিশ্লেষণ করা যায়। এটি আপনার কুয়েরির পরিকল্পনা এবং পারফরম্যান্স জানায়, যাতে আপনি অপ্টিমাইজেশন করতে পারেন।
explain()
ব্যবহার করুন:explain()
কুয়েরি স্ট্যাটিস্টিক্স প্রদান করে, যেমন কুয়েরি কীভাবে সম্পন্ন হচ্ছে এবং কোথায় পারফরম্যান্স সমস্যা হচ্ছে।
db.collection.aggregate([{ $match: { age: { $gte: 30 } } }]).explain("executionStats")
এটি আপনাকে কুয়েরির প্রকৃত কার্যকরী পরিকল্পনা দেখাবে, যা আরো দ্রুত কুয়েরি তৈরি করতে সাহায্য করবে।
MongoDB তে অ্যাগ্রিগেশন পারফরম্যান্স টিউনিং করা ডেটাবেসের কর্মক্ষমতা উন্নত করতে খুবই গুরুত্বপূর্ণ। ইনডেক্সিং, কুয়েরি অপ্টিমাইজেশন, $project
, $limit
এবং $skip
ব্যবহার, অপ্রয়োজনীয় ডেটা ফিল্টারিং, এবং $group
বা $unwind
অপারেশনগুলির যথাযথ ব্যবহার অ্যাগ্রিগেশন পারফরম্যান্স বৃদ্ধি করতে সহায়ক। MongoDB তে explain()
পদ্ধ
তি ব্যবহার করে কুয়েরির কার্যকারিতা বিশ্লেষণ করলে আরো দক্ষ কুয়েরি তৈরি করা সম্ভব।
Read more